export interface Protocol<t = unknown> {
  returncode: number;
  message: string;
  result?: t;
}

export interface ProtocolPager<t = unknown> {
  rowcount: number;
  pagecount: number;
  pageindex: number;
  list: t[];
}

export interface PageQueryParams {
  pageIndex: number;
  pageSize: number;
}

export interface PageQuery {
  userId?: number; // 用户ID
  regionId?: number; // 区域ID
  placeId?: string; // Google place id
  keyword?: string; // 关键词
  city?: string; // 城市
  county?: string; // 区县
  address?: string; // 地址
  networkType?: string; // 网络接入类型
  productType?: string; // 产品类型
  carrierType?: string; // 运营商类型
  pageIndex?: number; // 页码
  pageSize?: number; // 每页条数
}

/**
 * 高德地图输入提示信息模型
 */
export interface Tip {
  id: string; // 返回数据ID（POI/bus/busline的ID）
  name: string; // tip名称
  district: string; // 所属区域（格式：省+市+区）
  adcode: string; // 区域编码（六位区县编码）
  location?: string; // tip中心点坐标（格式：“X,Y”，busline类型可能为null）
  address: string; // 详细地址
  cityId?: string; // 城市ID
  cityName?: string; // 城市名称
}

export interface RegionAddress {
  poiId?: string /** poi唯一标识 */;
  provinceId?: string /** 省ID */;
  provinceName?: string /** 省名称 */;
  cityId?: string /** 城市ID */;
  cityName?: string /** 城市名称 */;
  countyId?: string /** 区县ID */;
  countyName?: string /** 区县名称 */;
  adCode?: string /** 区域编码 */;
  regionLevel?: number /** 层级，1=省，2=市，3=区县，4=地址 */;
  location?: string /** 中心点坐标 */;
  regionId?: string /** region_id */;
  regionName?: string /** 名称 */;
  address?: string /** 地址 */;
}

/**
 * 区域、地址信息接口
 */
export interface RegionOut {
  regionId?: string; // 自增主键id
  parentId?: string; // 父ID
  cityId?: string; // 城市ID
  cityName?: string; // 城市名称
  adCode?: string; // 行政编码
  regionLevel?: number; // 层级，1=省，2=市，3=区县，4=地址
  longitude?: number; // 经度（BigDecimal 对应 TS 中的 number）
  latitude?: number; // 纬度（BigDecimal 对应 TS 中的 number）
  location?: string; // 经纬度
  regionName?: string; // 名称
  address?: string; // 地址
  parent?: RegionOut; // 父区域
  children?: RegionOut[]; // 子区域（List<RegionOut> 对应 TS 中的数组）
  isDel?: number; // 删除状态 0：未删除，1：删除
  createdAt?: string; // 创建时间（ISO格式字符串，如：'2024-08-19T12:00:00'）（LocalDateTime 对应 TS 中的日期字符串）
  modifiedAt?: string; // 修改时间（ISO格式字符串）
  modifiedUser?: string; // 修改人
}

/**
 * 运营商联系人接口
 */
export interface ContactOut {
  id?: number; // 自增主键id
  regionId?: string; // 城市ID
  regionName?: string; // 城市
  carrierType?: string; // 运营商类型：移动、电信、联通
  carrierName?: string; // 运营商名称
  contactName?: string; // 联系人名称
  contactMobile?: string; // 联系人手机号
  remark?: string; // 备注
  isDel?: number; // 删除状态 0：未删除，1：删除
  createdAt?: string; // 创建时间（ISO格式字符串，如：'2024-08-19T12:00:00'）
  modifiedAt?: string; // 修改时间（ISO格式字符串）
  modifiedUser?: string; // 修改人
}

/**
 * 网站用户
 */
export interface UserOut {
  id: number; // 自增主键id
  userCode: string; // 用户编号
  email: string; // 用户编号
  abbreviation: string; // 用户简称
  fullName: string; // 用户全称
  tel: string; // 电话
  address: string; // 地址
  avatar: string; // 头像
  isDel: number; // 删除状态 0：未删除，1：删除
  createdAt: string; // 创建时间
  modifiedAt: string; // 修改时间
}

/**
 * 登录用户
 */
export interface LoginUser {
  id?: number; // 自增主键id
  userCode?: string; // 用户编号
  email?: string; // 用户编号
  abbreviation?: string; // 用户简称
  fullName?: string; // 用户全称
  tel?: string; // 电话
  address?: string; // 地址
  avatar?: string; // 头像
  token?: string;
  expireAt?: string;
  role?: string;
}

/**
 * 基础联系人
 */
export interface Contact {
  email: string;
  name: string;
  tel: string;
  address: string;
}

/**
 * POI信息
 */
export interface Poi {
  id: string; // 唯一ID
  type: string; // aoi 所属分类
  typecode: string; // aoi 分类编码
  name: string; // 名称
  address: string; // 地址
  location: string; // 经纬度，格式：X,Y
  pcode?: string; // 所在省份编码，extensions=all时返回
  pname?: string; // 所在省份名称，extensions=all时返回
  citycode?: string; // 城市编码，extensions=all时返回
  cityname?: string; // 城市名，extensions=all时返回
  adcode?: string; // 区域编码，extensions=all时返回
  adname?: string; // 区域名称，extensions=all时返回
  gridcode?: string; // 地理格ID，extensions=all时返回
  cpid?: string; // 父级POI
  floor?: string; // 楼层索引
  truefloor?: string; // 所在楼层
}

/**
 * 高德地图POI搜索接口响应结果
 */
export interface PlaceProtocol {
  /** 结果状态值（0：失败；1：成功） */
  status: number;
  /** 返回状态说明 */
  info: string;
  /** 搜索方案数目 */
  count: number;
  /** 搜索POI信息列表 */
  pois: Poi[];
}
